using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace mi2project
{
    public class EsVagyFa
    {
        public EsVagyFa()
        {
            csucsok = new List<Csucs>();
            csucsokSorszamai = new List<int>();
        }

        public void gyokerCsucsBeszurasa(Axioma axioma)
        {
            if (csucsok.Count == 0)
            {
                int csucsSorszama = sorszam();
                csucsok.Add(new Csucs(-1, csucsSorszama, 0, axioma));
            }
        }

        public void csucsBeszuras(int szulo, Axioma axioma)
        {
            int csucsSorszama = sorszam();
            int i = 0;
            while (csucsok[i].getSorszam() != szulo)
                i++;
            if (i < csucsok.Count)
            {
                csucsok[i].gyerekeihezAd(csucsSorszama);
                int melyseg = csucsok[i].getMelyseg() + 1;
                csucsok.Add(new Csucs(szulo, csucsSorszama, melyseg, axioma));
            }
        }

        public void csucsBeszuras(int szulo, int melyseg, Axioma axioma)
        {
            int csucsSorszama = sorszam();
            int i = 0;
            while (csucsok[i].getSorszam() != szulo)
                i++;
            if (i < csucsok.Count)
            {
                csucsok[i].gyerekeihezAd(csucsSorszama);
                csucsok.Add(new Csucs(szulo, csucsSorszama, melyseg, axioma));
            }
        }

        public void levelCsucsTorles(int sorszam)
        {
            if (sorszam != 0)
            {
                Csucs szulo = getCsucsSorszamAlapjan(getCsucsSorszamAlapjan(sorszam).getSzulo());
                szulo.gyerekeibolElvesz(sorszam);
            }
            csucsok.RemoveAt(index(sorszam));
        }

        private int sorszam()
        {
            int sorszam = 0;
            while (csucsokSorszamai.Contains(sorszam))
                sorszam++;
            csucsokSorszamai.Add(sorszam);
            return sorszam;
        }

        public Csucs getCsucsSorszamAlapjan(int sorszam)
        {
            int i = 0;
            while (i < csucsok.Count && csucsok[i].getSorszam() != sorszam)
                i++;
            return csucsok[i];
        }

        public Csucs getCsucsIndexAlapjan(int index)
        {
            return csucsok[index];
        }

        public int csucsokSzama()
        {
            return csucsok.Count;
        }

        public int index(int sorszam)
        {
            int i = 0;
            while (i < csucsok.Count && csucsok[i].getSorszam() != sorszam)
                i++;
            return i;
        }

        public void csucsTorles(int sorszam)
        {
            Csucs csucs = csucsok[index(sorszam)];
            csucsok.RemoveAt(index(sorszam));
            foreach (int gyerekSorszam in csucs.getGyerekei())
                csucsTorles(gyerekSorszam);
        }



        private List<Csucs> csucsok;
        private List<int> csucsokSorszamai;
    }
}

